//实现用户添加功能

//引入用户集合构造函数
const { User, validate } = require('../../model/user');
//引入加密模块
const bcrypt = require('bcrypt');
const express = require('express');

module.exports = async(req, res, next) => {

    try {
        await validate(req.body)
    } catch (ex) {
        //验证失败
        //重定向回用户添加页面,同时向路径中传递get参数
        // return res.redirect(`/admin/user-edit?message=${ex.message}`);
        //由于next只接受一个字符串参数，此时需要传递两个参数（重定向地址/错误信息）
        //使用JSON.stringify()将对象转化为字符串再传给next
        //验证错误的同时需要打断程序执行，因此使用return
        return next(JSON.stringify({ path: '/admin/user-edit', message: ex.message }))
    }

    //验证用户邮箱是否已经被注册
    let user = await User.findOne({ email: req.body.email });
    if (user) {
        return next(JSON.stringify({ path: '/admin/user-edit', message: '该邮箱已被注册' }));
    }

    //用户信息验证通过，对密码进行加密处理
    const salt = await bcrypt.genSalt(10);
    const password = await bcrypt.hash(req.body.password, salt);
    //加密完成后替换密码
    req.body.password = password;

    //将用户信息添加入库
    await User.create(req.body);
    //添加完成后重定向到用户列表页面
    return res.redirect('/admin/user');
}